perm filename RECDPY.SAI[SYS,HE] blob sn#021172 filedate 1973-01-20 generic text, type T, neo UTF8
COMMENT ⊗   VALID 00008 PAGES 
RECORD PAGE   DESCRIPTION
 00001 00001
 00002 00002	ENTRY DUMMY
 00003 00003	α LOCALS, INTERNALS, AND EXTERNALS
 00005 00004	α SYSTEM PROCEDURES
 00006 00005	α STATUS PROCEDURES
 00009 00006	α DISPLAY PRIMITIVES
 00013 00007	α INITIALIZATION SUBRS
 00015 00008	α	FLIT
 00020 ENDMK
⊗;
ENTRY DUMMY;

BEGIN "RECDPY - RECOGNIZER'S DISPLAY ROUTINES"

REQUIRE		100	PNAMES;
REQUIRE		"PREAMB.SAI[SYS,HE]"	SOURCE_FILE;
REQUIRE		"CPXSYM.AUX[SYS,HE]"	SOURCE_FILE;
REQUIRE		"DPYIII.AUX[H,RPO]"	SOURCE_FILE;

DEFINE
	APOG=<6>,
	BPOG=<7>,
	SPOG=<8>,
	T1POG=<9>,
	T2POG=<10>,

	TEXT=<1>, MEDIUM=<2>, BIG=<5>,
	DIM=<3>, BRIGHT=<6>;

α LOCALS, INTERNALS, AND EXTERNALS;

α	INTERNALS;
INTERNAL SAFE INTEGER ARRAY
	DPYAA[1:200],
	DPYBB[1:100],
	DPYCC[1:10];

INTERNAL BOOLEAN
	DPYBOOL;

INTERNAL STRING
	DPYRTS;

INTERNAL INTEGER
α DISPLAY WINDOW;
	DXL,DXH,DXCTR,DXO,DDX,
	DYL,DYH,DYCTR,DYO,DDY,	DA;
INTERNAL REAL
α LOGICAL PARAMETERS;
	LDX,LDY,
α SOURCE WINDOW;
	SXL,SXH,SXO,SDX,
	SYL,SYH,SYO,SDY,	SA,
α OBJECT WINDOW;
	OXL,OXH,
	OYL,OYH,
	MAGX,MAGY,DISX,DISY;

α	LOCALS;
BOOLEAN
	DB_BRK, DB_JOB, DB_LAB, DB_TELL, DB_INFO, DB_CMD;
STRING
	NAME, DS_JOB, DS_LAB, DS_TELL, DS_INFO, DS_CMD;
SET
	ESET;

α	EXTERNALS;
EXTERNAL INTEGER
	DEBUG1;
α SYSTEM PROCEDURES;

INTERNAL STRING SUBR PRINTNAME(ITEMVAR X);
BEGIN "PRINTNAME"
STRING NAME; INTEGER I;
NAME←CVIS(X,I);
IF I
THEN ⊂	IF CVN(X)>1024
	THEN NAME←"G"&CVOS(CVN(X))
	ELSE NAME←"L"&CVOS(CVN(X));
	NEW_PNAME(X,NAME) ⊃;
RETURN(NAME);
END "PRINTNAME";

α STATUS PROCEDURES;
FORWARD ISUBR DPYPTS;
FORWARD ISUBR DPYLS;
FORWARD ISUBR DPYS;
FORWARD ISUBR DPYSCENE;
FORWARD ISUBR FLIT;

DEFINE
	JOBLINE=	<DXL+5,DYH-30>,
	TELLINE=	<DXCTR,DYH-25>,
	LABLINE=	<DXCTR,DYH-40>,
	INFOLINE=	<DXCTR,DYH-55>,
	CMDLINE=	<DXCTR,DYH-70>;

SUBR DPYFRAME;
IF DEBUG1
THEN
⊂ "DPYFRAME" AIVECT(DXL,DYL);AVECT(DXH,DYL);AVECT(DXH,DYH);
	AVECT(DXL,DYH);AVECT(DXL,DYL);
	AIVECT(OXL,OYL);AVECT(OXH,OYL);AVECT(OXH,OYH);
	AVECT(OXL,OYH);AVECT(OXL,OYL) ⊃ "DPYFRAME";


ISUBR DPYSTAT;
IF DEBUG1
THEN ⊂ "DPYSTAT"
	DPYSET(DPYAA);
DPYBIG(MEDIUM);
DPYBRT(DIM);
DPYFRAME;
AIVECT(JOBLINE);
IF DB_BRK
THEN DPYSST("* "&DS_JOB)
ELSE DPYSST("- "&DS_JOB);
IF DB_LAB
THEN ⊂ AIVECT(LABLINE); DPYSST(DS_LAB) ⊃;
IF DB_TELL
THEN ⊂ AIVECT(TELLINE); DPYSST(DS_TELL) ⊃;
IF DB_INFO
THEN ⊂ AIVECT(INFOLINE); DPYSST(DS_INFO) ⊃;
IF DB_CMD
THEN ⊂ AIVECT(CMDLINE); DPYSST(DS_CMD) ⊃;
DPYOUT(SPOG);
	END "DPYSTAT";

ISUBR DPYBRK;
IF DEBUG1
THEN ⊂ "DPYBRK" DB_BRK←TRUE; DPYSTAT;
	DPYRTS←INCHWL;
	IF EQU(DPYRTS,"RUN")
	THEN DEBUG1←FALSE
	ELSE
	IF EQU(DPYRTS,"LINES")
	THEN DPYLS
	ELSE
	IF EQU(DPYRTS,"POINTS")
	THEN DPYPTS
	ELSE
	IF EQU(DPYRTS,"LOCAL")
	THEN DPYS
	ELSE
	IF EQU(DPYRTS,"GLOBAL")
	THEN DPYSCENE
	ELSE
	IF EQU(DPYRTS,"FLIT")
	THEN FLIT;
	DB_BRK←FALSE; DPYSTAT;
	⊃ "DPYBRK";

ISUBR DPYJOB(STRING JOBNAM);
IF DEBUG1
THEN
⊂ "DPYJOB" DB_JOB←TRUE; DS_JOB←JOBNAM; DPYSTAT; ⊃ "DPYJOB";

ISUBR DPYLAB(STRING STR);
IF DEBUG1
THEN
⊂ "DPYLAB" DB_LAB←TRUE; DS_LAB←STR; DPYBRK; ⊃ "DPYLAB";

ISUBR DPYTELL(STRING STR);
IF DEBUG1
THEN
⊂ "DPYTELL" DB_TELL←TRUE; DS_TELL←STR; DPYSTAT; ⊃ "DPYTELL";

ISUBR DPYINFO(STRING STR);
IF DEBUG1
THEN
⊂ "DPYINFO" DB_INFO←TRUE; DS_INFO←STR; DPYSTAT; ⊃ "DPYINFO";

ISUBR DPYCMD(STRING STR);
IF DEBUG1
THEN
⊂ "DPYCMD" DB_CMD←TRUE; DS_CMD←STR; DPYSTAT; ⊃ "DPYCMD";


α DISPLAY PRIMITIVES;

ISUBR DPYPT(SAFE REAL ARRAY ITEMVAR PT);
IF DEBUG1
THEN ⊂ "DPYPT"
	NAME←PRINTNAME(PT);
	DPYSET(DPYCC);
	DPYBIG(TEXT);
	DPYBRT(BRIGHT);
	IF NAME="G"
	THEN AIVECT($ #X(PT)-10,$ #Y(PT)-10)
	ELSE AIVECT(#X(PT)-10,#Y(PT)-10);
	DPYSST("o"&NAME);
	DPYOUT(T1POG);
	DPYBRK;
	HYDPOG(T1POG) ⊃ "DPYPT";

ISUBR DPYPTS;
IF DEBUG1
THEN ⊂ "DPYPTS"
ITEMVAR B;
SAFE REAL ARRAY ITEMVAR P;
	DPYS;
	DPYSET(DPYAA);
	DPYBIG(TEXT);
	DPYBRT(DIM);
	∀ B|BODY⊗SCENE≡B DO
	 ∀ P|POINT⊗B≡P DO
	⊂ AIVECT(#X(P)-10,#Y(P)-10); DPYSST(PRINTNAME(P)) ⊃;
	DPYOUT(T1POG);
	DPYBRK;
	HYDPOG(T1POG) ⊃ "DPYPTS";

ISUBR DPYL(ITEMVAR L);
IF DEBUG1
THEN ⊂ "DPYL"
SAFE REAL ARRAY ITEMVAR V1,V2;
NAME←PRINTNAME(L);
	IF NAME="G"
	THEN ⊂	ESET← $ ENDPT⊗L;
		V1←LOP(ESET);
		V2←COP(ESET);
		AIVECT($ #X(V1), $ #Y(V1));
		AVECT($ #X(V2), $ #Y(V2)) ⊃
	ELSE ⊂	ESET← ENDPT⊗L;
		V1←LOP(ESET);
		V2←COP(ESET);
		AIVECT(#X(V1), #Y(V1));
		AVECT(#X(V2), #Y(V2)) ⊃ ⊃ "DPYL";

ISUBR DPYLN(ITEMVAR L);
IF DEBUG1
THEN ⊂ "DPYLN"
REAL X,Y;
SAFE REAL ARRAY ITEMVAR V1,V2;
	NAME←PRINTNAME(L);
	IF NAME="G"
	THEN ⊂	ESET← $ ENDPT⊗L;
		V1←LOP(ESET);
		V2←COP(ESET);
		X← ( $ #X(V1) + $ #X(V2) )/2;
		Y← ( $ #Y(V1) + $ #Y(V2) )/2 ⊃
	ELSE ⊂	ESET← ENDPT⊗L;
		V1←LOP(ESET);
		V2←COP(ESET);
		X← ( #X(V1)+#X(V2))/2;
		Y← ( #Y(V1)+#Y(V2))/2 ⊃;
	AIVECT(X-10,Y-10);
	DPYSST(NAME) ⊃ "DPYLN";

ISUBR DPYLS;
IF DEBUG1
THEN ⊂ "DPYLS"
ITEMVAR B,L;
	DPYSET(DPYAA);
	DPYBIG(TEXT);
	DPYBRT(DIM);
	∀ B|BODY⊗SCENE≡B DO
	 ∀ L|LINE⊗B≡L DO
	  ⊂	DPYL(L);
		DPYLN(L) ⊃;
	DPYOUT(T1POG);
	DPYBRK;
	HYDPOG(T1POG) ⊃ "DPYLS";

ISUBR DPYB(ITEMVAR B);
IF DEBUG1
THEN ⊂ "DPYB" ITEMVAR L;
	DPYSET(DPYAA); DPYBRT(BRIGHT);DPYBIG(TEXT);
	NAME←PRINTNAME(B);
	IF NAME="G"
	THEN ∀ L| $ LINE⊗B≡L DO DPYL(L)
	ELSE ∀ L| LINE⊗B≡L DO DPYL(L);
	DPYOUT(APOG); DPYINFO("BODY "&NAME) ⊃ "DPYB";

ISUBR DPYS;
IF DEBUG1
THEN ⊂ "DPYS" ITEMVAR B,L;
	DPYSET(DPYAA); DPYBRT(DIM); DPYBIG(TEXT);
	∀ B|BODY⊗SCENE≡B DO
	 ∀ L|LINE⊗B≡L DO DPYL(L);
	DPYOUT(BPOG); DPYTELL("THE LOCAL SCENE") ⊃ "DPYS";

ISUBR DPYSCENE;
IF DEBUG1
THEN ⊂ "DPYSCENE" ITEMVAR B,L;
	DPYSET(DPYAA); DPYBRT(DIM); DPYBIG(TEXT);
	∀ B|$ BODY⊗SCENE≡B DO
	 ∀ L|$ LINE⊗B≡L DO DPYL(L);
	DPYOUT(BPOG); DPYTELL("THE GLOBAL SCENE") ⊃ "DPYSCENE";

α INITIALIZATION SUBRS;

ISUBR DPYINIT;
⊂ "DPYINIT"
α PHYSICAL, LOGICAL CAMERA SIZE;
	LDX ← 316; LDY ← 240;
α SOURCE WINDOW;
	SXL←0; SXH←LDX; SDX←LDX;
	SYL←0; SYH←LDY; SDY←LDY;
	SXO←0; SYO←0; SA←SDX/SDY;
α DISPLAY WINDOW;
	DDX←DDY←500; DA←1;
	DXO←0; DYO←0;
	DXL←DXO; DXH←DXO+DDX; DYL←DYO; DYH←DYO+DDY;
α OBJECT WINDOW;
	MAGX←MAGY←(IF SA>DA THEN DDX/SDX ELSE DDY/SDY);
	OXL←DXO; OXH←DXO+MAGX*SDX;
	OYL←DYO; OYH←DYO+MAGY*SDY;
	DISX←DXO; DISY←DYO;
DXCTR←(DXL+DXH)/2; DYCTR←(DYL+DYH)/2;

DPYTYP(-20,20,1);
DPYJOB("RECOGNIZER");
DPYLAB("DISPLAY INITIALIZED");
⊃ "DPYINIT";

ISUBR DPYVINIT;
⊂ "DPYVINIT"
ITEMVAR B;
SAFE REAL ARRAY ITEMVAR P;
∀ B|BODY⊗SCENE≡B DO
 ∀ P|POINT⊗B≡P DO
 ⊂	∂(P)[6] ← MAGX * ∂(P)[1]  +  DISX;
	∂(P)[7] ← MAGY * ∂(P)[2]  +  DISY; ⊃ ⊃ "DPYVINIT";

ISUBR DPYVI(SAFE REAL ARRAY ITEMVAR V);
⊂ "DPYVI"
	∂(V)[6] ← MAGX * ∂(V)[1]  +  DISX;
	∂(V)[7] ← MAGY * ∂(V)[2]  +  DISY; ⊃ "DPYVI";

α	FLIT
called from DPYBRK.
allows you to look at selected parts of
the associative store for debugging purposes.;
α	TYPEIT="17"	MEANS REAL ARRAY
	TYPEIT="4"	MEANS REAL;

ISUBR FLIT;
BEGIN "FLIT"
	LABEL TRIPLE;
	BOOLEAN GLBSW,DTMSW,ITMSW;
	INTEGER FLAG,BREAK,I;
	SAFE REAL ARRAY ITEMVAR XRA;
	REAL ITEMVAR XR;
	ITEMVAR X,Y,Z; STRING STR,TOKEN,TRPSW;

SETBREAK(1,"≡⊗`, "&'12,'15,"ISN");

WHILE TRUE DO BEGIN "FLIT LOOP"

TYPE "COMMANDS: x,y,z  x⊗y x⊗ANY x`y x`ANY GLOBAL DATUM NUMBER"&
	↓&"*" EOM;
GLBSW←FALSE;
DTMSW←FALSE;
ITMSW←FALSE;

STR←INCHWL;
DO BEGIN "GET IT"
TOKEN←SCAN(STR,1,BREAK);
IF EQU(TOKEN,"DATUM")
THEN DTMSW←TRUE;
IF EQU(TOKEN,"NUMBER")
THEN ITMSW←TRUE;
IF EQU(TOKEN,"GLOBAL")
THEN GLBSW←TRUE;
END "GET IT" UNTIL ¬EQU(TOKEN,"DATUM") ∧ ¬EQU(TOKEN,"NUMBER")
		∧ ¬EQU(TOKEN,"GLOBAL");

IF EQU(TOKEN,"Q")
THEN DONE;

IF ITMSW ∨ DTMSW
THEN DO  BEGIN "CONVRT"
   X←CVSI(TOKEN,FLAG);
   IF FLAG ∨ TYPEIT(X)=0
   THEN TYPE "NO ITEM - "&TOKEN EOM
   ELSE IF ITMSW
	THEN TYPE "PNAME:"&PRINTNAME(X)&TAB&"ITEM:"&CVOS(CVN(X)) EOM;
	IF DTMSW
	THEN IF TYPEIT(X)=17
	     THEN BEGIN
		XRA←CVSI(TOKEN,FLAG);
		TYPE "REAL ARRAY ITEMVAR DATUM" EOM;
		IF GLBSW
		THEN FOR I←1 S1U 4 DO
			TYPE CVG(GLB ∂(XRA)[I])&", " EOS
		ELSE FOR I←1 S1U 7 DO
			TYPE CVG(∂(XRA)[I])&", " EOS;
		TYPE "DONE" EOM;
		END
	     ELSE IF TYPEIT(X)=4
		  THEN BEGIN
			XR←CVSI(TOKEN,FLAG);
			TYPE "REAL ITEMVAR DATUM" EOM;
			IF GLBSW
			THEN TYPE "PNAME:"&PRINTNAME(XR)&CVG(GLB ∂(XR)) EOM
			ELSE TYPE "PNAME:"&PRINTNAME(XR)&CVG(∂(XR)) EOM;
			END;
	TOKEN←SCAN(STR,1,BREAK);
   END "CONVRT" UNTIL TOKEN=NULL;

X←CVSI(TOKEN,FLAG);
IF BREAK="⊗" ∨ BREAK="`"
THEN BEGIN "SET"
	TRPSW←BREAK;
	TOKEN←SCAN(STR,1,BREAK);
	Y←CVSI(TOKEN,FLAG);
	IF BREAK="≡"
	THEN GO TRIPLE;
	IF TRPSW="⊗"
	THEN IF EQU(TOKEN,"ANY")
	     THEN IF GLBSW
		  THEN ∀ Z|GLB X⊗ANY≡Z DO TYPE PRINTNAME(Z)&" " EOS
		  ELSE ∀ Z|X⊗ANY≡Z DO TYPE PRINTNAME(Z)&" " EOS
	     ELSE IF GLBSW
		  THEN ∀ Z|GLOBAL X⊗Y≡Z DO TYPE PRINTNAME (Z)&" " EOS
		  ELSE ∀ Z|X⊗Y≡Z DO TYPE PRINTNAME (Z)&" " EOS
	ELSE IF EQU(TOKEN,"ANY")
	     THEN IF GLBSW
		  THEN ∀ Z|GLB X⊗Z≡ANY DO TYPE PRINTNAME(Z)&" " EOS
		  ELSE ∀ Z|X⊗Z≡ANY DO TYPE PRINTNAME(Z)&" " EOS
	     ELSE IF GLBSW
		  THEN ∀ Z|GLOBAL X⊗Z≡ANY DO TYPE PRINTNAME(Z)&" " EOS
		  ELSE ∀ Z|X⊗Z≡Y DO TYPE PRINTNAME(Z)&" " EOS;
	TYPE "THAT'S ALL OF 'EM." EOM;
	END "SET"
ELSE BEGIN "TRIPLE"
	TOKEN←SCAN(STR,1,BREAK);
	IF BREAK="≡"
	THEN BEGIN "DO TRP"
		Y←CVSI(TOKEN,FLAG);
TRIPLE:		TOKEN←SCAN(STR,1,BREAK);
		Z←CVSI(TOKEN,FLAG);
		IF GLBSW
		THEN IF GLOBAL X⊗Y≡Z
		     THEN   TYPE "(GLOBAL) TRUE" EOM
		     ELSE TYPE "(GLOBAL) FALSE" EOM
		ELSE IF X⊗Y≡Z
		     THEN   TYPE "TRUE" EOM
		     ELSE TYPE "FALSE" EOM;
		END "DO TRP";
	END "TRIPLE";
END "FLIT LOOP";
DPYBRK;
END "FLIT";


END "RECDPY - RECOGNIZER'S DISPLAY ROUTINES";